﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProjectEulerSolutions
{
    /*
     * The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.

Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:

    d2d3d4=406 is divisible by 2
    d3d4d5=063 is divisible by 3
    d4d5d6=635 is divisible by 5
    d5d6d7=357 is divisible by 7
    d6d7d8=572 is divisible by 11
    d7d8d9=728 is divisible by 13
    d8d9d10=289 is divisible by 17

Find the sum of all 0 to 9 pandigital numbers with this property.

     * 
     * */
    class Problem43 : IProblem
    {
        public string Calculate()
        {
            List<long> digits = new List<long>()
            {
                0,1,2,3,4,5,6,7,8,9
            };

            var permutations = CommonFunctions.GetPermutations(digits);

            List<long> conforming = new List<long>();

            foreach (long i in permutations)
            {
                if (i < 1023456789)
                    continue;

                long div2 = (i / 1000000) % 1000;
                if (div2 % 2 != 0)
                    continue;

                long div3 = (i / 100000) % 1000;
                if (div3 % 3 != 0)
                    continue;

                long div5 = (i / 10000) % 1000;
                if (div5 % 5 != 0)
                    continue;

                long div7 = (i / 1000) % 1000;
                if (div7 % 7 != 0)
                    continue;

                long div11 = (i / 100) % 1000;
                if (div11 % 11 != 0)
                    continue;

                long div13 = (i / 10) % 1000;
                if (div13 % 13 != 0)
                    continue;

                long div17 = i % 1000;
                if (div17 % 17 != 0)
                    continue;

                conforming.Add(i);
                Console.WriteLine(i);
            }

            return conforming.Sum().ToString();
        }
    }
}
